package com.ny.service.impl;

import com.ny.entity.User;
import com.ny.mapper.UserMapper;
import com.ny.service.EmailService;
import com.ny.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import java.util.Date;


/**
 * 用户服务实现类（已去除密码加密）
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private EmailService emailService;

    /**
     * 添加用户
     * @param user 用户对象，包含用户信息
     * @return 返回添加结果，1表示成功，0表示失败
     */
    @Override
    public int addUser(User user) {
        // 不对密码进行加密处理，直接存储明文密码
        // 设置创建时间
        if (user.getCreatedTime() == null) {
            user.setCreatedTime(new Date());
        }
        
        // 设置默认角色
        if (user.getRole() == null) {
            user.setRole("USER");
        }
        
        return userMapper.addUser(user);
    }

    /**
     * 根据用户名和密码查找用户
     * @param username 用户名
     * @param password 密码
     * @return 返回查找到的用户对象，如果未找到则返回null
     */
    @Override
    public User findUser(String username, String password) {
        System.out.println("=== 开始查找用户 ===");
        System.out.println("开始查找用户: username=" + username + ", password=" + password);
        
        // 先根据用户名查找用户
        System.out.println("调用 userMapper.findUser(username) 方法");
        User user = userMapper.findUser(username);
        System.out.println("根据用户名查找到的用户: " + user);
        
        if (user == null) {
            System.out.println("未找到该用户名的用户");
            System.out.println("=== 查找用户结束 ===");
            return null;
        }
        
        // 直接比较明文密码
        System.out.println("比较密码: 用户输入的密码=" + password + ", 数据库中的密码=" + user.getPassword());
        if (password != null && password.equals(user.getPassword())) {
            System.out.println("密码匹配成功");
            System.out.println("=== 查找用户结束 ===");
            return user;
        }
        
        System.out.println("密码不匹配");
        System.out.println("=== 查找用户结束 ===");
        return null;
    }

    /**
     * 根据用户名查找用户
     * @param username 用户名
     * @return 返回查找到的用户对象，如果未找到则返回null
     */
    @Override
    public User findByUsername(String username) {
        return userMapper.findByUsername(username);
    }

    /**
     * 根据用户ID查找用户
     * @param userId 用户ID
     * @return 返回查找到的用户对象，如果未找到则返回null
     */
    @Override
    public User findByUserId(Integer userId) {
        return userMapper.findByUserId(userId);
    }

    @Override
    public User findUserByEmail(String email) {
        return userMapper.findUserByEmail(email);
    }

    @Override
    public int updatePassword(String password, String email) {
        // 直接存储明文密码
        return userMapper.updatePassword(password, null, email);
    }


    // 给发件人发送验证码
    @Override
    public void sendToEmail(String toEmail) {
        // 执行发送验证码的逻辑
        emailService.sendEmail(toEmail,emailService.getCode());
        // 把验证码存储起来Redis中。
    }

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public boolean checkCode(String toEmail, String code) {
        // 获取Redis中存储的验证码
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        String redisCode = ops.get(toEmail);
        // 判断验证码是否存在且一致
        if (redisCode == null) {
            return false; // 验证码不存在（已过期或未发送）
        }
        return redisCode.equals(code);
    }

}